"""Peewee migrations: ::

    > Model = migrator.orm['name']

    > migrator.sql(sql)
    > migrator.python(func, *args, **kwargs)
    > migrator.create_model(Model)
    > migrator.remove_model(Model, cascade=True)
    > migrator.add_fields(Model, **fields)
    > migrator.change_fields(Model, **fields)
    > migrator.remove_fields(Model, *field_names, cascade=True)
    > migrator.rename_field(Model, old_field_name, new_field_name)
    > migrator.rename_table(Model, new_table_name)
    > migrator.add_index(Model, *col_names, unique=False)
    > migrator.drop_index(Model, index_name)
    > migrator.add_not_null(Model, field_name)
    > migrator.drop_not_null(Model, field_name)
    > migrator.add_default(Model, field_name, default)

"""

import datetime as dt
import peewee as pw


def migrate(migrator, database, fake=False, **kwargs):
    """Write your migrations here."""

    @migrator.create_model
    class Inventory(pw.Model):
        offer = pw.ForeignKeyField(db_column='offer_id', rel_model=migrator.orm['offer'], to_field='id')
        status = pw.CharField(max_length=255)
        created_at = pw.DateTimeField(default=dt.datetime.now())
        updated_at = pw.DateTimeField(default=dt.datetime.now())

    @migrator.create_model
    class Ticket(pw.Model):
        offer = pw.ForeignKeyField(db_column='offer_id', rel_model=migrator.orm['offer'], to_field='id')
        status = pw.CharField(max_length=255)
        created_at = pw.DateTimeField(default=dt.datetime.now())
        updated_at = pw.DateTimeField(default=dt.datetime.now())
        value = pw.CharField(max_length=255)
        key = pw.CharField(max_length=255)

    migrator.remove_fields('productcontent', 'id')

    migrator.remove_fields('productmetadata', 'id')


def rollback(migrator, database, fake=False, **kwargs):
    """Write your rollback migrations here."""

    migrator.remove_model('ticket')

    migrator.remove_model('inventory')

    migrator.add_fields(
        'productmetadata',

        id=pw.PrimaryKeyField())

    migrator.add_fields(
        'productcontent',

        id=pw.PrimaryKeyField())
